package controllers

import (
	"encoding/json"
	"errors"
	"github.com/astaxie/beego"
	"lottery/constant"
	"lottery/models"
	"lottery/utils"
)

type UserCtl struct {
	BaseCtl
}

func (u *UserCtl) CheckLogin() {
	if u.isLogin() {
		u.SetJson("已登录", nil)
		return
	}

	u.Go2Domain()
	return
}

func (u *UserCtl) Login() {
	if u.isLogin() {
		user, err := models.FindUserInfo(u.GetUserId())
		u.SetJson(user, err)
		return
	}

	name := u.GetString("name", "")
	passwd := u.GetString("passwd", "")
	beego.Error("logindata", name, passwd)
	if name == "" {
		u.SetJson(nil, errors.New("请使用手机号或者邮箱登录"))
		return
	}

	if passwd == "" {
		u.SetJson(nil, errors.New("密码不能为空"))
		return
	}

	user, err := models.AuthUser(name, passwd)
	beego.Error(err)
	if err != nil {
		u.SetJson(nil, errors.New("用户或密码不正确"))
		return
	}

	if err := u.SetUserId(user.Id); err != nil {
		u.Go2Domain()
		return
	}

	u.SetJson(user, nil)
	return
}

func (u *UserCtl) Logout() {
	if !u.isLogin() {
		u.SetJson(nil, errors.New("未登录"))
		return
	}

	u.DelUserId()
	u.SetJson("退出成功", nil)
}

func (u *UserCtl) Create() {
	if userId := u.GetUserId(); userId > 0 {
		u.SetJson(nil, errors.New("用户已登录"))
		return
	}

	user := &models.User{}
	err := json.Unmarshal(u.Ctx.Input.RequestBody, user)
	beego.Error("createData", user, err)
	if err != nil {
		u.SetJson(nil, err)
		return
	}

	if user.UserName == "" || user.Password == "" {
		u.SetJson(nil, errors.New("用户名或密码不能为空"))
		return
	}

	if user.PhoneNumb == "" && user.Email == "" {
		u.SetJson(nil, errors.New("电话号码以及邮箱为空"))
		return
	}
	if user.PhoneNumb != "" {
		if utils.GetPhomeNumb(user.PhoneNumb) == constant.Unknow {
			u.SetJson(nil, errors.New("非法手机号"))
			return
		}
		if models.ExistsPhoneNumb(user.PhoneNumb) {
			u.SetJson(nil, errors.New("该手机号已注册"))
			return
		}

	}

	if user.Email != "" {
		if !utils.ValidMail(user.Email) {
			u.SetJson(nil, errors.New("邮箱格式不正确"))
			return
		}

		if models.ExistsEmail(user.Email) {
			u.SetJson(nil, errors.New("该邮箱已注册"))
			return
		}
	}

	err = models.SaveUser(user)
	if err == nil {
		u.SetUserId(user.Id)
	}

	u.SetJson(nil, err)
	return
}
